/*
* Copyright (c) Microsoft Corporation.  All Rights Reserved.
*
* Class used to represent a parameter value in string format
*/
#pragma once
#include "Mock10.h"

#pragma push_macro("SEALED")
#undef SEALED

#if _MSC_VER >= 1400
# define SEALED sealed
#else
# define SEALED
#endif

namespace Mock10
{
    class MOCK10_API ParameterValue SEALED
    {
    public:
        explicit ParameterValue(const wchar_t* pszValue);
        ParameterValue();
        ParameterValue(const ParameterValue&); // Copy constructor
        ~ParameterValue();
        
        ParameterValue& Format(const wchar_t* pszFormat, ...);
        bool IsValid() const;
        operator const wchar_t*() const;

        #if defined(MOCK10_FULL_BUILD)
        ParameterValue& Format(const __wchar_t* pszFormat, ...);
        ParameterValue(const __wchar_t* pszValue);
        #endif

        // wchar_t native type exports
        #if defined(BUILD_WCHAR_T_EXPORTS)
        operator const __wchar_t*() const;
        #endif

    private:
        ParameterValue& operator=(const ParameterValue&); // Not implemented

        struct Impl;
        Impl* m_pImpl;
    };
} /* namespace Mock10 */

#pragma pop_macro("SEALED")